Skip to main content

Promise.then 方法的返回值问题

第一种情况,返回一个 Promise

var p1 = Promise.resolve(42)
p1.then(value => {
return new Promise(function (resolve, rejected) {
resolve(value + 1)
})
}).then(value => {
console.log(value)
})

//43
//第一种情况,新建promise的resolve传出的值将作为then方法返回的promise的resolve的值传递出,console将打印出43

第二种情况,返回一个值

var p1 = Promise.resolve(42)
p1.then(value => {
return value + 2
}).then(value => {
console.log(value)
})

//44
//第二种情况,return的值将作为then方法返回的promise的resolve的值传递出,console将打印出44

第三种情况,新建一个 promise,使用 reslove 返回值

var p1 = Promise.resolve(42)
p1.then(value => {
const p2 = new Promise(function (resolve, rejected) {
resolve(value + 3)
})
}).then(value => {
console.log(value)
})

//undifined
//第三种情况,虽然新建了promise,但对于then方法来说,没有向return 的promise传递返回值,console将打印出undifined

第四种情况,新建一个 promise,使用 return 返回值

var p1 = Promise.resolve(42)
p1.then(value => {
const p2 = new Promise(function (resolve, rejected) {
return value + 4
})
}).then(value => {
console.log(value)
})

//undifined
//第四种情况,虽然新建了promise,但对于then方法来说,没有向它返回的promise传递返回值,console将打印出undifined

第五种情况,没有返回值

var p1 = Promise.resolve(42)
p1.then(value => {
return undefined
}).then(value => {
console.log(value)
})

//undifined
//then方法没有返回值,then方法的promise的resolve的值将传递出undifined。

以上三、四、五种情况,其实都是一样的问题,构造 then 方法的函数没有向 then 方法返回的 promise 对象的 resolve 方法传递值。因此 resolve 返回的都是 undfined

进阶,返回的 promise 自带 then 方法

var p1 = Promise.resolve(42)
p1.then(value => {
//返回的promise自带then方法
return new Promise(function (resolve, rejected) {
setTimeout(function () {
resolve(value + 1)
}, 3000)
}).then(value => {
return value + 1
})
}).then(value => {
console.log(value)
})

//44

参考答案